/*
通过mutations间接更新state的多个方法对象  dispatch 访问这里的数据
*/
//导入方法名
import {
  RECEIVE_ADDRESS,
  RECEIVE_CATEGORYS,
  RECEIVE_SHOPS,
  RECEIVE_USER_INFO,
  RESET_USER_INFO,
  RECEIVE_GOODS,
  RECEIVE_RATINGS,
  RECEIVE_INFO,
  INCREMENT_FOOD_COUNT,
  DECREMENT_FOOD_COUNT,
  CLEAR_CART,
  RECEIVE_SEARCH_SHOPS
} from "./mutations-types";
//导入请求接口函数
import {
  reqAddress,
  reqFoodCategorys,
  reqShops,
  reqUserInfo,
  reqLogout,
  reqShopInfo,
  reqShopRatings,
  reqShopGoods,
  reqSearchShop
} from "api/index.js";
// 导出
//这里使用vuex管理商城的数据的话 那这里就需要在这里发送异步请求接口了获取数据 在传递给mutations
export default {
  // 异步获取地址 方法来的  ,可接收参数 commit 是action的方式修改方法
  async getAddress({ commit, state }) {
    // 发送异步ajax请求
    const geohash = state.latitude + "," + state.longitude;
    const result = await reqAddress(geohash);
    // 提交一个mutation
    if (result.code === 0) {
      const address = result.data;
      //传递给mutations 就是调用方法 传递一个对象 对面也是接收一个对象格式
      commit(RECEIVE_ADDRESS, { address });
    }
  },
  // 异步获取食品分类列表
  async getCategory({ commit }) {
    // 发送异步ajax请求
    const result = await reqFoodCategorys();
    // 提交一个mutation
    if (result.code === 0) {
      const categorys = result.data;
      //传递给mutations 传递一个对象 对面也是接收一个对象格式
      commit(RECEIVE_CATEGORYS, { categorys });
    }
  },
  // 异步获取商家列表
  async getShops({ commit, state },cb) {
    // 发送异步ajax请求
    const { longitude, latitude } = state; //解构对象
    const result = await reqShops(longitude, latitude);
    // 提交一个mutation
    if (result.code === 0) {
      const shops = result.data;
      //传递给mutations 传递一个对象 对面也是接收一个对象格式
      commit(RECEIVE_SHOPS, { shops });
      cb && cb(); //cb回调可传递可不传递的需要判断一下 && 存在就调用
    }
  },
  //已经拿到了user用户信息了 所以直接是同步记录用户信息了
  recordUser({ commit }, userInfo) {
    //userinfo是传递过来的参数
    commit(RECEIVE_USER_INFO, { userInfo }); //调用mutation里面的方法并且传递参数过去
  },

  // 异步获取用户信息 li就是利用了cookie技术的持久化 接口就是要在打开应用的时候就要调用了  判断是否存在值信息 有信息就渲染赋值到userinfo里面去 没有就登录
  async getUserInfo({ commit }) {
    const result = await reqUserInfo();
    if (result.code === 0) {
      const userInfo = result.data; //后台查到后就返回用户信息 再次保存在userinfostate状态中 因为
      commit(RECEIVE_USER_INFO, { userInfo });
    }
  },

  // 异步退出登录
  async logout({ commit }) {
    const result = await reqLogout();
    if (result.code === 0) {
      commit(RESET_USER_INFO); //调用mutations里面的方法
    }
  },

  // 异步获取商家信息
  async getShopsInfo({ commit }) {
    const result = await reqShopInfo();
    if (result.code === 0) {
      const info = result.data;
      commit(RECEIVE_INFO, { info });
    }
  },

  // 异步获取商家评价列表
  async getShopRatings({ commit },cb) {
    const result = await reqShopRatings();
    if (result.code === 0) {
      const ratings = result.data;
      commit(RECEIVE_RATINGS, { ratings }); //commit调用mutation里面的方法名
      cb && cb(); //cb回调可传递可不传递的需要判断一下 && 存在就调用
    }
  },

  // 异步获取商家商品列表
  async getShopGoods({ commit }, cb) {
    const result = await reqShopGoods();
    if (result.code === 0) {
      const goods = result.data;
      commit(RECEIVE_GOODS, { goods });
      cb && cb(); //cb回调可传递可不传递的需要判断一下 && 存在就调用
    }
  },

 // 同步更新food中的count值
  updateFoodCount({commit},{isAdd,food}) {
    //通过判断是增加还是减法 2个情况的 调用不同的mutations方法进行修改
    if(isAdd) {
      //增加  传递对应的food过去
      commit(INCREMENT_FOOD_COUNT,{food})
    }else {
      commit(DECREMENT_FOOD_COUNT,{food})
    }
  },

  //清空购物车cartfood数据
  clearCart({commit}) {
    commit(CLEAR_CART)
  },

    // 异步获取商家商品列表 state 和搜索关键字
  async getSearchShop({ commit,state }, {keyword}) {
    const geohash = state.latitude + ',' + state.longitude
    const result = await reqSearchShop(geohash,keyword);
    if (result.code === 0) {
      const searchShops = result.data;
      commit(RECEIVE_SEARCH_SHOPS, { searchShops });
    }
  },
};
